package com.vt.statusmanager.xml;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vt.statusmanager.Preconditions;
import com.vt.statusmanager.data.Managers;

/**
 * Сохранение/загрузка записей менеджеров в xml файл
 * 
 * @author Vit
 * 
 */
public class XmlOperations {
	/**
	 * Сохранение записей менеджеров из хранилища данных в xml файл
	 * 
	 * @param filePath Путь до генерируемого xml файла
	 * @param managers Хранилище с записями менеджеров
	 */
	public static void saveXml(String filePath, Managers managers) {
		Preconditions.notBlank(filePath);
		Preconditions.notNull(filePath);
		Preconditions.notNull(managers);
		try {
			OutputStream outputStream;
			XStream xStream;
			outputStream = new FileOutputStream(new File(filePath));
			xStream = new XStream(new DomDriver("UTF-8"));
			xStream.toXML(managers, outputStream);
			outputStream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Загрузить записи в виде объекта managers из xml-документа с записями менеджеров за прошлый запуск
	 * 
	 * @param filePath Путь до xml документа
	 */
	public static Managers loadFromXml(String filePath) {
		Preconditions.notBlank(filePath);
		Preconditions.notNull(filePath);
		Managers localBuffer = null;
		try {
			FileReader fileReader;
			fileReader = new FileReader(filePath);
			XStream xStream = new XStream(new DomDriver("UTF-8"));
			localBuffer = (Managers) xStream.fromXML(fileReader);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return localBuffer;
	}
}
